/**
 * @基本数组处理方法
 * */

/***
 * @调用方法
 * 导入 import { Arrdos,Arrsinfo } from '../js.DigitGroup'; 结构内置方式加引用
 * 根据自己的需要来用内力的方法
 * 方法:
 *   Arrrinfo(value){
 *     return Arrdos(值);
 *    }
 *
 * @用在html模板上
 * <div>Arrdos(值)</div>
 * methods:{
 *  Arrdos // 需要在声明周期中声明改方法
 * }
 *
 */

// 去除字符串里面所有的逗号
export function Arrdos(value) {
  if (typeof value == 'string') {
    if (value) {
      let c = '';
      let a = value.split(',');
      for (let i = 0, l = a.length; i < l; i++) {
        c = c + a[i];
      }
      return c;
    }
  } else {
    alert('请传递字符串类型的值');
  }
}

// 数组里面字符串分割逗号(一整个数组传递进来)
export function Arrsinfo(a) {
  let info = '';
  a = a.map((res, index) => {
    return (a[index].info = res.name.split(','));
  });
  a.forEach((res, index) => {
    res.forEach((ress, indexa) => {
      return (info += '<div>' + ress + '</div>');
    });
  });
  return info;
}

// 数组里面字符串分割逗号(数组里面单个字符串带逗号的分割)
export function Arrstifo(value) {
  if (typeof value == 'string') {
    if (value) {
      let arrr = value.split(',');
      let info = '';
      arrr.forEach((res) => {
        return (info += '<div>' + res + '</div>');
      });
      return info;
    }
  }
}

// 提交数据某一个字段为JSON
export function Hybrid(value) {
  if (value) {
    return JSON.stringify(value);
  } else {
    return '你传递的值不存在,请仔细看是哪个环节出错了';
  }
}

/***
 * @删除对象中的键值
 * 用法:
 * del(obj,arry) 第一个传递的是一个对象(原数据对象) 第二个就是你要删除对象里面的key值是什么，传递数组即(一维数组，不是JSON数组)
 * */

export function del(obj, arry) {
  if (Object.keys(obj).length > 0 && arry instanceof Array) {
    arry.map((res) => {
      delete obj[res];
    });
    return obj;
  } else {
    throw new Error('你传的要么是个空对象，要么不是数组');
  }
}

/***
 * @节流
 * 用法：
 * zhi:thorttle(function(){xxxxx})
 * */
export function thorttle(fn, delay = 300) {
  let lastTime = '';
  let timer = '';
  let interval = delay;
  return function () {
    let args = arguments;
    let nowTime = Date.now();
    if (lastTime && nowTime - lastTime < interval) {
      clearTimeout(timer);
      timer = setTimeout(() => {
        lastTime = nowTime;
        fn.apply(this, args);
      }, interval);
    } else {
      lastTime = nowTime;
      // fn.apply(this, args);
    }
  };
}

/**
 * @JSON数组去重
 * 用法:
 * 第一个参数是你需要传递JSON数组(！！注意是json数组) 第二个值是你需要过滤的键值是什么(！！注意传递字符串)
 *   let info = [
        { id: 1, name: 'xxxx' },
        { id: 1, name: 'xxadsadwda' },
        { id: 2, name: 'xxadsadwda' },
        { id: 2, name: 'xxadsadwda' },
        { id: 3, name: 'xxadsadwda' },
      ];
 * shuzuout(info,'id') 传递是JSON数组 需要过滤的键值是id
 * */
export function shuzuout(arry, value) {
  let res = new Map();
  if (arry.length > 0 && arry instanceof Array) {
    for (let i in arry) {
      if (Object.keys(arry[i]).indexOf(value) > -1) {
        arry = arry.filter((resa, index) => {
          return !res.has(resa[value]) && res.set(resa[value], resa[value]);
        });
        return arry;
        // break;
      } else {
        throw new Error('你传递的参数有错误,甚至不存在');
      }
    }
  } else {
    throw new Error('你传递的数组是空的或者不是个数组');
  }
}
